using UnityEngine;

public class GunController : MonoBehaviour
{
    // public Transform player; // 玩家主体
    // public JoystickController aimJoystick; // 瞄准摇杆
    // public float rotationOffset = 90f; // 旋转偏移修正
    
    private bool isUsingMouse = true; // 默认使用鼠标
    
    private Vector3 inputMovement;// 角色输入移动方向向量
    
    // 子弹发射相关变量
    [Header("子弹发射设置")]
    public float bulletCooldown = 1.0f; // 子弹冷却时间，默认1秒
    private float bulletTimer = 0f; // 子弹计时器
    private Vector3 mouseWorldPos; // 鼠标世界坐标位置
    private Vector2 direction; // 方向向量
    // 缓存Muzzle节点引用
    private Transform muzzleTransform;
    
    private void Start()
    {
        muzzleTransform = transform.Find("Muzzle");
    }
    
    //摇杆控制角色位置
    public void PlayerMove(Vector3 movement)
    {
        inputMovement = movement;
        // Debug.Log("PlayerMove: " + movement);
    }

    private void Update()
    {
        // 更新子弹计时器
        bulletTimer += Time.deltaTime;
        
        // 检测输入方式（鼠标或摇杆）
        // CheckInputMethod();
        
        // 根据当前输入方式旋转枪械
        // if (isUsingMouse)
        // {
        //     RotateWithMouse();
        // }
        // else
        // {
        //     RotateWithJoystick();
        // }
        
        RotateWithJoystick();
        
        // 同步枪械和玩家的翻转状态
        SyncFlipWith();
    }

    // 检测输入方式
    private void CheckInputMethod()
    {
        // 检测鼠标移动
        bool mouseMoving = new Vector2(Input.GetAxis("Mouse X"), Input.GetAxis("Mouse Y")).magnitude > 0.1f;
        // 检测摇杆输入
        bool joystickActive = Mathf.Abs(inputMovement.x) > 0.1f || Mathf.Abs(inputMovement.y) > 0.1f;
        
        Debug.Log("mouseMoving: " + mouseMoving + " joystickActive: " + joystickActive);
        
        // 如果鼠标移动，切换到鼠标控制
        if (mouseMoving && !joystickActive)
        {
            isUsingMouse = true;
        }
        // 如果摇杆有输入，切换到摇杆控制
        else if (joystickActive)
        {
            isUsingMouse = false;
        }
        // 否则保持当前控制方式不变
    }

    // 鼠标控制枪械旋转
    private void RotateWithMouse()
    {
        // 获取鼠标在世界坐标中的位置
        Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        mousePos.z = 0; // 确保z坐标为0
        
        // 计算方向向量
        Vector2 direction = (mousePos - transform.position).normalized;
        
        // 计算旋转角度
        float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
        
        // 应用旋转
        transform.rotation = Quaternion.Euler(0f, 0f, angle);
    }

    // 摇杆控制枪械旋转
    private void RotateWithJoystick()
    {
        // 获取摇杆输入
        float horizontal = inputMovement.x;
        float vertical = inputMovement.y;
        
        // 计算方向向量
        Vector2 direction = new Vector2(horizontal, vertical).normalized;
        
        // 如果有有效输入
        if (direction.magnitude > 0.1f)
        {
            // 计算旋转角度
            float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;
            
            // 应用旋转
            transform.rotation = Quaternion.Euler(0f, 0f, angle);
            
            //开枪
            Fire();
        }
    }

    /**
     * 同步翻转状态
     */
    private void SyncFlipWith()
    {
        // 获取枪的当前旋转角度（0-360度）
        float gunAngle = transform.eulerAngles.z;
        
        // 根据枪的角度决定是否翻转枪
        bool shouldFlip = gunAngle > 90 && gunAngle < 270;
        
        //翻转枪支
        transform.localScale = new Vector3(transform.localScale.x,shouldFlip ? -Mathf.Abs(transform.localScale.y) : Mathf.Abs(transform.localScale.y), transform.localScale.z);
    }

    private void Fire()
    {
        if (bulletTimer >= bulletCooldown)
        {
            // 重置计时器
            bulletTimer = 0f;

            // 使用缓存的Muzzle节点引用
            // 在枪口前方添加微小偏移防止碰撞重叠
            Vector3 spawnOffset = transform.right * 0.5f; // 进一步增加偏移量确保离开碰撞体范围
            Vector3 spawnPosition = muzzleTransform != null
                ? muzzleTransform.position + spawnOffset
                : transform.position + spawnOffset;

            // 调试信息：显示子弹生成位置和方向
            // Debug.Log($"生成子弹位置: {spawnPosition}, 方向: {gunTransform.right}");

            // qita();
            

            // 从对象池获取子弹
            GameObject bullet = BulletPool.GetInstance().GetBullet(spawnPosition);
            if (bullet != null)
            {
                // 设置子弹旋转方向与Gun一致
                bullet.transform.rotation = transform.rotation;
            
                // 获取子弹脚本并设置方向
                BulletScript bulletScript = bullet.GetComponent<BulletScript>();
                if (bulletScript != null)
                {
                    // 设置玩家引用用于碰撞忽略
                    bulletScript.playerTransform = transform;
                    // 设置子弹移动方向为Gun的朝向
                    bulletScript.SetDirection(transform.right);
                }
            }
        }
    }

    public GameObject lineBullet;

    private void qita()
    {
        // GameObject bullet = ABMgr.GetInstance().LoadAssetBundleSync<GameObject>("model", "Shoot Trail");

        GameObject bullet = Instantiate(lineBullet, muzzleTransform.position, transform.rotation);
        Debug.Log(bullet);


        if (bullet != null)
        {
            // 设置子弹旋转方向与Gun一致
            bullet.transform.rotation = transform.rotation;
            bullet.transform.SetParent(transform.parent);
            Destroy(bullet, 0.5f);
        }
        
    }
}